package zpe.model;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.ForeignKey;

import zpe.genericcrud.model.Entidade;

@Entity
@Table(name = "tb_item_carga", schema = "dbo")
public class ItemCarga implements Entidade {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name="ci_item_carga",columnDefinition="int NOT NULL")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;

	@Column(name="nr_saldo",columnDefinition="int")
	private Integer saldoEstoque;

	@Column(name="ds_localizacao")
	private String localizacao;

	@Column(name="qtd_total_declarado",columnDefinition="int")
	private Integer qtdeTotalDeclarado;

	@Column(name="vl_peso_declarado")
	private Double pesoTotalDeclarado;

	@Column(name="vl_volume_declarado")
	private Double volumeTotalDeclarado;

	@Column(name="fl_perigosa")
	private Boolean perigosa;

	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "cd_conteiner", columnDefinition="int NOT NULL")
	@ForeignKey(name="fk_ci_conteiner")
	private Conteiner conteiner = new Conteiner();

	@OneToOne
	@JoinColumn(name = "cd_carga",  columnDefinition="int NOT NULL")
	@ForeignKey(name="fk_ci_carga")
	private Carga carga;

	@Column(name="vl_cubagem")
	private Double cubagem;
	
	public Double getCubagem() {
		return cubagem;
	}

	public void setCubagem(Double cubagem) {
		this.cubagem = cubagem;
	}

	public Carga getCarga() {
		return carga;
	}

	public void setCarga(Carga carga) {
		this.carga = carga;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getSaldoEstoque() {
		return saldoEstoque;
	}

	public void setSaldoEstoque(Integer saldoEstoque) {
		this.saldoEstoque = saldoEstoque;
	}

	public String getLocalizacao() {
		return localizacao;
	}

	public void setLocalizacao(String localizacao) {
		this.localizacao = localizacao;
	}

	public Integer getQtdeTotalDeclarado() {
		return qtdeTotalDeclarado;
	}

	public void setQtdeTotalDeclarado(Integer qtdeTotalDeclarado) {
		this.qtdeTotalDeclarado = qtdeTotalDeclarado;
	}

	public Double getPesoTotalDeclarado() {
		return pesoTotalDeclarado;
	}

	public void setPesoTotalDeclarado(Double pesoTotalDeclarado) {
		this.pesoTotalDeclarado = pesoTotalDeclarado;
	}

	public Double getValorTotalDeclarado() {
		return volumeTotalDeclarado;
	}

	public void setValorTotalDeclarado(Double valorTotalDeclarado) {
		this.volumeTotalDeclarado = valorTotalDeclarado;
	}

	public Boolean getPerigosa() {
		return perigosa;
	}

	public void setPerigosa(Boolean perigosa) {
		this.perigosa = perigosa;
	}

	public Conteiner getConteiner() {
		return conteiner;
	}

	public void setConteiner(Conteiner conteiner) {
		this.conteiner = conteiner;
	}

	@Override
	public Map<String, Object> notEmptyFields() {
		// TODO Auto-generated method stub
		Map<String, Object> map = new HashMap<String, Object>();
		if(carga!=null && carga.getId()!=null)
			map.put("carga.id", carga.getId());
		return map;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ItemCarga other = (ItemCarga) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	public Double getVolumeTotalDeclarado() {
		return volumeTotalDeclarado;
	}

	public void setVolumeTotalDeclarado(Double volumeTotalDeclarado) {
		this.volumeTotalDeclarado = volumeTotalDeclarado;
	}

	
}
